import { DeptResultItem } from '@/services/api/model/deptModel';
import _ from 'lodash';
// 注意调用顺序
export function setDisabledTrue(data: DeptResultItem[], isDis: boolean) {
  data.forEach((item) => {
    _.set(item, 'disabled', isDis);
    if (item.children) {
      setDisabledTrue(item.children, isDis);
    }
  });
}
export function setDisabled(data: DeptResultItem[], id: number) {
  const cloneData: DeptResultItem[] = _.cloneDeep(data);
  for (let i = 0; i < cloneData.length; i++) {
    const item = cloneData[i];
    if (item.id === id) {
      _.set(item, 'disabled', true);
      if (item.children) {
        setDisabledTrue(item.children, true);
      }
    } else {
      _.set(item, 'disabled', false);
      if (item.children) {
        setDisabled(item.children, id);
      }
    }
  }
}

/**
 
* 根据树子节点ID查找所有父节点ID
 * @param {array} dataSource 树形结构数据源
 * @param {number} nodeId 子节点ID
 * @returns {array} 包含所有父节点ID的数组，按照从根节点到直接父节点的顺序排序
 */
export function findParentIds(dataSource: DeptResultItem[], nodeId: number) {
  const parentIds: number[] = []; // 用于存储所有父节点ID的数组

  // 定义一个递归函数，用于遍历整棵树并查找子节点的所有父节点
  function traverse(node: DeptResultItem, nodeId: number) {
    if (node.id === nodeId) {
      // 如果当前节点的ID等于子节点的ID，则表示已经找到了子节点，可以开始向上查找父节点
      return true; // 返回true表示已经找到了子节点
    }

    if (node.children) {
      // 如果当前节点有子节点，则继续遍历子节点
      for (const childNode of node.children) {
        if (traverse(childNode, nodeId)) {
          // 如果在子节点中找到了子节点的父节点，则将当前节点的ID添加到父节点ID数组中，并返回true表示已经找到了子节点
          parentIds.push(node.id);
          return true;
        }
      }
    }

    return false; // 如果当前节点不是子节点的父节点，则返回false
  }

  // 从根节点开始遍历整棵树，并调用递归函数查找子节点的所有父节点
  for (const node of dataSource) {
    if (traverse(node, nodeId)) {
      // 如果在当前节点的子树中找到了子节点的父节点，则直接退出循环
      break;
    }
  }
  return parentIds; // 返回所有父节点ID的数组
}
